<?php
/**
 * Класс User Базовый класс пользователя
 *  @author Mike
 */

class City extends ActiveRecord {
	protected $tableName = 'city';
	protected $pkName = 'ID_city';
	protected $requiredFields = array('city_name');
	protected $fieldsRules = array (
								'city_name' => array('min' => 2, 'max' => 64),
								);
	
	/**
	 * Получает список городов в БД
	 */
	public function getCities() {
		$citiesArray = $this->find('all', array('select' => '`city`.`ID_city`,`city`.`city_name`'));
		return $citiesArray;
	}	
	
	/**
	 * Получает название города по его id
	 * 
	 * @param int $cityId - id города
	 */
	public static function getCityNameById($cityId) {
		if(!$cityId) return false;
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `city`.`city_name` FROM `city` WHERE `city`.`ID_city`='" . Service_Escape::absolutelyEscapeString($cityId) . "'";
		return $objDB->selectOneValue($stmt);
	}
	
	/** Получает координаты города по его id
	*
	* @param int $cityId - id города
	*/
	public static function getCityCoordinatesById($cityId) {
		if(!$cityId) return false;
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `city`.`latitude`,`city`.`longitude` FROM `city` WHERE `city`.`ID_city`='" . Service_Escape::absolutelyEscapeString($cityId) . "'";
		return $objDB->selectOneRow($stmt);
	}
	
	/** Получает id ближайшего города для заданной точки
	 *
	 * @param int $cityId - id города
	 */
	public static function findNearest($latitude, $longitude) {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `city`.`ID_city`, 6371 * ACOS(SIN(" . $latitude . " * PI() / 180) * SIN(`city`.`latitude` * PI() / 180) + COS(" . $latitude . " * PI() / 180) * COS(`city`.`latitude` * PI() / 180) * COS(" . $longitude . " * PI() / 180 - `city`.`longitude` * PI() / 180)) AS `distance` FROM `city` ORDER BY `distance` ASC LIMIT 1";
		$resultArray = $objDB->selectOneRow($stmt);
		return $resultArray['ID_city'];
	}
}

?>